/**
 * 
 */
package com.gragra.structures.generatorEnumerables;
import com.gragra.structures.SentenceStructure;
import com.gragra.structures.StructureGenerator;
import com.gragra.structures.generators.DownAndSplitOfPunctuation;
import com.gragra.structures.generators.NoNumbers;
import com.gragra.structures.generators.SplitDownAndTokenPunctuation;
import com.gragra.structures.generators.SplitOnWhiteNoPunctNoNum;
import com.gragra.structures.generators.SplitOnWhiteSpaceCodeToIntegerGenerator;
import com.gragra.structures.generators.SplitOnWhiteSpaceSplitOfSurroundingPunctuation;
/**
 * This Enumerable Class contains elements for every generator subtype that can be used to
 * generate sentence type structures
 * @author Christoph Teichmann
 * created Nov 13, 2012 12:03:29 AM
 * @version 0.1
 */
public enum SentenceGenerators
{
	NoNumberNoPunct
	{

		@Override
		public StructureGenerator<SentenceStructure> getInstance()
		{return new SplitOnWhiteNoPunctNoNum();}
	},
	/**
	 * extends the SplitOnWhiteSpaceAndSplitOfPunctuation by adding the replacement of number with the word "NUMBERS", a number matches "\\d+"
	 */
	NoNumbers
	{
		@Override
		public StructureGenerator<SentenceStructure> getInstance()
		{return new NoNumbers();}
	},
	/**
	 * This generator splits on whitespace and split of punctuation surrounding a word, it also applies toLowerCase to the input string before any further processing.
	 */
	SplitOnWhiteSpaceSplitOfPunctuationAndDownCase
	{
		@Override
		public StructureGenerator<SentenceStructure> getInstance()
		{return new DownAndSplitOfPunctuation();}
	},
	/**
	 * This generator splits on whitespace and split of punctuation surrounding a word.
	 */
	SplitOnWhiteSpaceAndSplitOfPunctuation
	{
		@Override
		public StructureGenerator<SentenceStructure> getInstance()
		{return new SplitOnWhiteSpaceSplitOfSurroundingPunctuation();}
	},
	/**
	 * this will split word on whitespace, assume that every instance of punctuation is
	 * a single token and that all characters should be changed to downcase according to
	 * the current local
	 */
	SplitOnWhiteDownAndSplitPunctuation
	{
		@Override
		public StructureGenerator<SentenceStructure> getInstance()
		{return new SplitDownAndTokenPunctuation();}
	},
	/**
	 * this represents the assumption that all words are delimited by whitespace and
	 * no further operations aside from splitting the words is necessary
	 */
	SplitOnWhiteSpace
	{
		@Override
		public StructureGenerator<SentenceStructure> getInstance()
		{return new SplitOnWhiteSpaceCodeToIntegerGenerator();}
	};
	/**
	 * returns a new structure generator that will implement the operations for the given
	 * enumerable instance
	 *
	 * @return
	 */
	public abstract StructureGenerator<SentenceStructure> getInstance();
}